オープンデータとは「オープンなデータ」のことです. Open Definition の定義では「誰もが自由に利用、再利用、再配布可能なデータ」とされます.もっと簡単に「自由に二次利用可能なデータ」と表現することもできます. 自由に二次利用可能な状態にあれば,データの内容や形式を問わずに,オープンデータと捉えることができます .
しかしながら,オープンデータ利用者の立場からすると,ただ「オープン」であればよいというわけではありません.当然「使いやすさ」という観点も重要になってきます.また,完全に「オープン」なのか条件付きの「オープン」なのか,その範囲も重要になってきます.
ウェブの発明者であるティム・バーナーズ=リーはオープンデータの評価指標「5 Star OPEN DATA(以下図参照)」を提案しています.オープンデータを公開する際のベストプラクティス的な指標でオープンデータが備えるべき要件が段階別に定義されています.
「5 Star OPEN DATA」は,利用者にとっても,提供者にとっても非常にわかりやすい指標です. 本演習では「5 Star OPEN DATA」に照らし合わせながら進めていきます.
5 Star OPEN DATA
「★(一つ星)オープンデータ」とは「5 Star OPEN DATA」の第一段階にあたるデータです. オープンライセンス(Open License;OL)のもとで公開されていることが条件となります.
一般的に,公開状態にあるデータを利用する場合,そのデータ利用規約や知的財産権を確認する必要があります.とくに権利主張がなされていなくても,そのデータには著作権が発生している可能性があります.著作者が明確に権利を放棄する,利用規約を明示するといった手段を取らない限り,そのデータが「著作物」であるか「オープン」であるかといった判断は困難です.
一方で,著作権が放棄された,または消失した状態をパブリックドメインといいます.パブリックドメインのデータであれば,自由に利用,再利用,再配布可能です.しかしながら,著作権の場合と同様で,そのデータがパブリックドメインにあるか否かの判断は困難です.パブリックドメインにあるデータであっても,そのことを明示しておく必要があります.
オープンライセンスとは,利用にあたっての条件を極力少なくし,広範囲での利用を想定したライセンスです. オープンライセンスとして,例えば以下のライセンスがあります.オープンデータでは Creative Commons(CC) の CC-BY や CC-BY-SA が採用されることが多いようです.
「★(一つ星)オープンデータ」は,オープンライセンスにより「誰もが自由に利用、再利用、再配布可能なデータ」であることが明示されたデータです.オープンライセンスにより,データの利用範囲が明確となることで,利用者は安心してオープンデータを利用することができます.しかし,「★(一つ星)オープンデータ」はオープンであることだけが保障されたデータといえます.オープンであっても誰もが自由に利用できるとは限らないからです.
「★(一つ星)オープンデータ」はオープンライセンスのもとで公開されたオープンデータです.「オープン」であることが保証されていますが,利用者の利便性までが考慮されているわけではありません.オープンなデータではありますが,利用するにはそれなりの手間が必要になります.演習では「★(一つ星)オープンデータ」処理のの難しさを体験します.
本演習では,利用するデータソースとして一橋大学データ集を利用します. (ただし,オープンライセンスでは公開されていませんので★(一つ星)以下のオープンデータとなります.)
http://www.hit-u.ac.jp/guide/information/data/index.html
一橋大学データ集には,一橋大学に関するさまざまな数値情報が公開されています.今回の演習では「科学研究費助成事業,通称,科研費」のデータを利用します.データは一橋大学データ集「外部資金」の「科学研究費助成事業(科学研究費補助金・学術研究助成基金助成金)」で,PDF(Portable Document Format)ファイルとして公開されています(以降 科研費PDF).
この科研費PDFファイルには下記のような表データが記録されています.PDFファイルは「★(一つ星)オープンデータ」における「オープンであっても使いにくい」ファイル形式の代表事例です.PDFファイルは文書の配布フォーマットとしては優秀ですが,文書の中身にあるデータを自由に取り出し,処理するには不向きなファイル形式です.本演習では「科研費PDFファイル」からテキストデータを抽出し,加工処理,可視化までの一連の作業を行います.
PDFファイルの例
はじめに演習環境を整えます.Rを起動して演習で使用する拡張パッケージを読み込みます.以下のコマンドを実行してください.
if(!require(ggplot2)){ # 拡張パッケージはインストールされているか?
# 拡張パッケージのインストール
install.packages("ggplot2")
# 拡張パッケージの読み込み
library(ggplot2)
}
# PDFファイル用パッケージ
if(!require(pdftools)){ # 拡張パッケージはインストールされているか?
# 拡張パッケージのインストール
install.packages("pdftools")
# 拡張パッケージの読み込み
library(pdftools)
}つぎに ggplot2 で日本語を表示するための設定を行います. 以下のコマンドを実行してください.
if(.Platform$OS.type=="windows")
windowsFonts(yugo=windowsFont("Yu Gothic"))
if(capabilities("aqua"))
quartzFonts(yugo=quartzFont(rep("YuGo-Medium",4)))Windows環境あるいはMacOS環境のフォントを設定しています.
これで演習の準備が整いました.それではさっそく始めましょう.
まずは科研費PDFファイルからテキストデータを抽出します.抽出には pdftools パッケージの pdf_text 関数を用います.
まず,読み込むPDFファイルのURLを変数に格納します.
url = "http://www.hit-u.ac.jp/guide/information/data/pdf/06_kakenhi_2016.pdf"pdf_text 関数を用いPDFファイルからテキストを抽出します.ここではPDFファイルのURLを指定していますが, PDFファイルのファイルパスを指定することも可能です.
pdf_text 関数はPDFファイルに格納されているテキストを抽出し,そのテキストを戻り値として返します.
# PDFファイルからテキストを取り出します
res <- pdf_text(url)
# 変数の中身を確認します
res## [1] " 2016年(平成28年)\n科学研究費助成事業(学術研究助成基金助成金/科学研究費補助金)\n 交付額(円)\n 研究種目 交付件数\n 直接経費 間接経費\n新学術領域研究 0 0 0\n基盤研究(S) 3 98,100,000 29,430,000\n基盤研究(A) 22 145,000,000 43,500,000\n基盤研究(B) 38 133,400,000 40,020,000\n基盤研究(C) 97 101,371,167 30,303,357\n挑戦的萌芽研究 5 4,100,000 1,230,000\n若手研究(A) 2 7,700,000 2,310,000\n若手研究(B) 23 23,798,457 7,139,538\n研究活動スタート支援 7 7,300,000 2,190,000\n研究成果公開促進費 1 1,099,872 0\n特別研究員奨励費 67 53,600,000 3,480,000\n国際共同研究強化 4 34,300,000 10,290,000\n 609,769,496 169,892,895\n 2015年度合計 269\n 779,662,391\n"
PDFファイルから取り出したテキストが表示されます.「」「」など制御記号がそのまま表示されるので一行で表示されています.
このままでは抽出結果が分かりにくいので,抽出したテキストを一旦ファイル出力し,中身を確認してみましょう.
write(res,"tmp.txt")出力された tmp.txt をテキストエディタで開いてみてください.なんとなく表形式となっているので少し加工すればCSV形式のファイルとして処理できそうです.
つぎに科研費PDFファイルから取り出したテキストを R で処理しやすくするために加工します.
ここでは CSV 形式への変換を試みます. CSV 形式とは,値をカンマ「,」で区切り,1行で1レコードを表現する表形式のデータフォーマットです.
たとえば,以下の表をCSV形式に変換すると,
| ID | 氏名 | 血液型 |
|---|---|---|
| 0001 | 山田太郎 | A |
| 0002 | 山田花子 | B |
| 0003 | 山田次郎 | O |
こうなります.
ID,氏名,血液型
,,
0001,山田太郎,A
0002,山田花子,B
0003,山田次郎,O
カンマ「,」以外にタブ「」を区切り文字として利用する場合は TSV(Tab Separated Value) 形式と呼ばれます.
それでは早速先程のテキストを CSV 形式にしてみましょう.
ここでは文字列置換による手法をとります.
まず,CSV形式の妨げとなる3桁区切りのカンマを除去します.
res<-gsub(",","",res)gsub 関数は文字列置換のための関数で以下のように使います.
置換後のオブジェクト<- gsub(置換文字のパターン,置換後の文字,置換前のオブジェクト)
つぎに複数の空白文字を一つのカンマに置き換えます.
res<-gsub(" +",",",res)ここで置換文字のパターンとして「 +」が指定されていますが, これは正規表現の一つで前の空白文字と合わせて「複数の連続する空白文字」を表すパターンとなります.
ここまでの処理結果を確認するために,加工後のオブジェクトをファイルに書き出してみましょう.
write(res,"kaken16.txt")書き出したファイルをテキストエディタで開いてみてください. 行毎に列数は異なるものの CSV 形式として出力されていることがわかります.
つぎに書き出した CSV ファイルを read.csv 関数で読み込みます. (オブジェクトに格納されたテキストから直接読み込むこともできますが,Windowsで発生した不具合対応のため,一度ファイルに出力しています.)
基本的に read.csv 関数は表形式のCSVファイルをデータフレーム形式に変換する関数です. 列数が異なるCSV形式を読み込むことはできません. ファイルを直接修正する手法もありますが,ここではエラーとなる行をスキップすします(引数skipをread.csv関数に渡す).
#df16<-read.csv(text=res,skip = 5,header = FALSE,stringsAsFactors = FALSE)
# CSVファイルを読み込む.条件は,5行スキップ,ヘッダー・因子(Factor)への自動変換なし
df16<-read.csv("kaken16.txt",skip = 5,header = FALSE,stringsAsFactors = FALSE)
#表示する
df16## V1 V2 V3 V4
## 1 新学術領域研究 0 0 0
## 2 基盤研究(S) 3 98100000 29430000
## 3 基盤研究(A) 22 145000000 43500000
## 4 基盤研究(B) 38 133400000 40020000
## 5 基盤研究(C) 97 101371167 30303357
## 6 挑戦的萌芽研究 5 4100000 1230000
## 7 若手研究(A) 2 7700000 2310000
## 8 若手研究(B) 23 23798457 7139538
## 9 研究活動スタート支援 7 7300000 2190000
## 10 研究成果公開促進費 1 1099872 0
## 11 特別研究員奨励費 67 53600000 3480000
## 12 国際共同研究強化 4 34300000 10290000
## 13 609769496 169892895 NA
## 14 2015年度合計 269 NA
## 15 779662391 NA NA
read.csv 関数はデータフレームを返します.
haader=FALSE としたため,列名は自動的に割り当てられているので注意して下さい. 列名は以下で確認できます.
colnames(df16)## [1] "V1" "V2" "V3" "V4"
今回の例では試せませんが, read.csv の実行時 header = TRUE とすると1行目をヘッダー(列名)として利用することもできます.
もう一度,データフレームの内容を確認してみましょう.
df16## V1 V2 V3 V4
## 1 新学術領域研究 0 0 0
## 2 基盤研究(S) 3 98100000 29430000
## 3 基盤研究(A) 22 145000000 43500000
## 4 基盤研究(B) 38 133400000 40020000
## 5 基盤研究(C) 97 101371167 30303357
## 6 挑戦的萌芽研究 5 4100000 1230000
## 7 若手研究(A) 2 7700000 2310000
## 8 若手研究(B) 23 23798457 7139538
## 9 研究活動スタート支援 7 7300000 2190000
## 10 研究成果公開促進費 1 1099872 0
## 11 特別研究員奨励費 67 53600000 3480000
## 12 国際共同研究強化 4 34300000 10290000
## 13 609769496 169892895 NA
## 14 2015年度合計 269 NA
## 15 779662391 NA NA
つぎは列ごとに内容を確認してみましょう.
df16$V1## [1] "新学術領域研究" "基盤研究(S)" "基盤研究(A)"
## [4] "基盤研究(B)" "基盤研究(C)" "挑戦的萌芽研究"
## [7] "若手研究(A)" "若手研究(B)" "研究活動スタート支援"
## [10] "研究成果公開促進費" "特別研究員奨励費" "国際共同研究強化"
## [13] "" "" ""
df16$V2## [1] "0" "3" "22" "38"
## [5] "97" "5" "2" "23"
## [9] "7" "1" "67" "4"
## [13] "609769496" "2015年度合計" "779662391"
df16$V3## [1] 0 98100000 145000000 133400000 101371167 4100000 7700000
## [8] 23798457 7300000 1099872 53600000 34300000 169892895 269
## [15] NA
df16$V4## [1] 0 29430000 43500000 40020000 30303357 1230000 2310000
## [8] 7139538 2190000 0 3480000 10290000 NA NA
## [15] NA
13行目以降のデータが少しおかしなことになっています.
該当箇所を抜き出してみましょう.
#行数を格納する
tmp<-nrow(df16)
#13行目から最終行までの連続値を作成する(ベクトル形式)
13:tmp## [1] 13 14 15
#該当箇所を表示する
df16[13:tmp,]## V1 V2 V3 V4
## 13 609769496 169892895 NA
## 14 2015年度合計 269 NA
## 15 779662391 NA NA
どうやら合計金額のデータのようです. このようなデータは,あとから計算すればよいので13行目以降は削除することにします.
データフレームから不要な行(列)を削除するには, 指定した行(列)に NULL を代入することでその行(列)を削除する, 特定行(列)を除いた形でデータフレームを再構成する,の二通りの手法があります.
ここは特定行を除いた形でデータフレームを再構成する手法を使います. 以下のコマンドを実行してみてください.
df16[-(13:nrow(df16)),]## V1 V2 V3 V4
## 1 新学術領域研究 0 0 0
## 2 基盤研究(S) 3 98100000 29430000
## 3 基盤研究(A) 22 145000000 43500000
## 4 基盤研究(B) 38 133400000 40020000
## 5 基盤研究(C) 97 101371167 30303357
## 6 挑戦的萌芽研究 5 4100000 1230000
## 7 若手研究(A) 2 7700000 2310000
## 8 若手研究(B) 23 23798457 7139538
## 9 研究活動スタート支援 7 7300000 2190000
## 10 研究成果公開促進費 1 1099872 0
## 11 特別研究員奨励費 67 53600000 3480000
## 12 国際共同研究強化 4 34300000 10290000
該当箇所以外のデータが表示されたかと思います. このように行(列)を指定する際,マイナス記号「-」を付けると指定した行(列)以外を選択することができます.
この機能を使って13行目から最終行までを削除しましょう.
df16<-df16[-(13:nrow(df16)),]
df16## V1 V2 V3 V4
## 1 新学術領域研究 0 0 0
## 2 基盤研究(S) 3 98100000 29430000
## 3 基盤研究(A) 22 145000000 43500000
## 4 基盤研究(B) 38 133400000 40020000
## 5 基盤研究(C) 97 101371167 30303357
## 6 挑戦的萌芽研究 5 4100000 1230000
## 7 若手研究(A) 2 7700000 2310000
## 8 若手研究(B) 23 23798457 7139538
## 9 研究活動スタート支援 7 7300000 2190000
## 10 研究成果公開促進費 1 1099872 0
## 11 特別研究員奨励費 67 53600000 3480000
## 12 国際共同研究強化 4 34300000 10290000
これできちんとした表形式となりました.
つぎに型変換を行います.基本的に read.csv 関数が値の内容を見て,文字列と数値を区別してくれるのですが, ときどき判定に失敗し,思ったような計算ができない場合があります. 型変換を使うと,対象の値の型を強制的に変更することができます.
ここでは as.numeric 関数を使って値の型を数値に変換します.
df16$V2<-as.numeric(df16$V2)
df16$V3<-as.numeric(df16$V3)
df16$V4<-as.numeric(df16$V4)文字列に変換する場合は as.character 関数を用います.
これらの関数が変換に失敗すると NA を戻します.
as.numeric("words")## [1] NA
つぎに欠損値(NA)対応を行います.ここではNAを0に置換します.
#NAであれば0を代入する
df16$V2[is.na(df16$V2)]<-0
df16$V3[is.na(df16$V3)]<-0
df16$V4[is.na(df16$V4)]<-0最後に各列の名前をつけます.
colnames(df16)<-c("type","count","direct","indirect")
df16## type count direct indirect
## 1 新学術領域研究 0 0 0
## 2 基盤研究(S) 3 98100000 29430000
## 3 基盤研究(A) 22 145000000 43500000
## 4 基盤研究(B) 38 133400000 40020000
## 5 基盤研究(C) 97 101371167 30303357
## 6 挑戦的萌芽研究 5 4100000 1230000
## 7 若手研究(A) 2 7700000 2310000
## 8 若手研究(B) 23 23798457 7139538
## 9 研究活動スタート支援 7 7300000 2190000
## 10 研究成果公開促進費 1 1099872 0
## 11 特別研究員奨励費 67 53600000 3480000
## 12 国際共同研究強化 4 34300000 10290000
これでようやく表形式のデータを用意することができました.
つぎは可視化です.
可視化には ggplot2 パッケージを用います. 作成したデータにある研究種目別・交付件数を棒グラフとして描画します.
まず,描画に使うデータを指定します.
g1<-ggplot(df16,aes(x=type,y=count))
g1当然ですがこの状態で描画しても何も表示されません.
つぎにデータの描画方法を指定します.ここでは棒グラフを描画する geom_bar 関数を指定します.
#棒グラフの描画.x,yを指定するので stat="identity"
g1<-g1+geom_bar(stat="identity")
g1棒グラフが描画されました.あとは細かな体裁を整えます.まず,X軸ラベル,Y軸ラベル,グラフタイトルを設定します.
#軸タイトル,グラフタイトルの設定
g1<-g1+xlab("研究種目")+ylab("交付件数")+ggtitle("2016年 科学研究費補助金")
g1グラフの中の日本語が文字化けする場合があるので明示的にフォントを指定します.
#日本語フォント設定
g1<-g1+theme_gray(base_family ="yugo")
g1つぎにX軸ラベルを縦書きにします.
#軸ラベルを縦にする
g1<-g1+theme(axis.text.x = element_text(angle = 90, hjust = 1))
g1つぎに科研費交付額をグラフにします.描画手順は先と同じです. ここでは棒グラフの枠の色(color)と塗り色(fill)を変更して描画します.
g2<-ggplot(df16,aes(x=type,y=(direct+indirect)/1000))+geom_bar(stat = "identity",color = "magenta",fill="magenta",linetype = 2,size = 0.5 )
g2<-g2+xlab("研究種目")+ylab("交付額(千円)")+ggtitle("2016年 科学研究費補助金")
g2<-g2+theme_bw(base_family ="yugo")+theme(axis.text.x = element_text(angle = 90, hjust = 1))
g2geom_bar 関数を geom_line 関数に変更すると折れ線グラフとなります.
g2<-ggplot(df16,aes(x=type,y=(direct+indirect)/1000,group=1))+geom_line(colour = "magenta",linetype = 2,size = 0.5 )ggplot2には様々なグラフ関数が含まれています.興味がある人はggplot2のドキュメントを覗いてみてください.
http://docs.ggplot2.org/current/
さて,これで2016年科研費PDFファイルの可視化ができました. 以上の作業により,「★(一つ星)オープンデータ」処理の手間がなんとなく体験できたのではないかと思います.. 「オープンであっても処理しにくくては使えない」という状態にあるのが 「★(一つ星)オープンデータ」です.
それでは,ここまでの作業環境を保存しておきましょう.
作業を一旦中断する場合などは, 作業環境をファイルに保存しておくと便利です.
作業環境を保存する場合は以下を実行します.
save(list = ls(all.names = TRUE), file = "all.RData")作業環境を読み込む場合は以下を実行します.
#作業環境をクリアする
rm(list=ls())
#作業環境を読み込む
load("all.RData")作業環境を保存しておけば, 作業の続きから開始することができます.
それでは2015年から2010年までの科研費PDFも可視化してみましょう. 基本的な手順は2016年のときと一緒ですが,あとでの処理を考慮して年別(PDFファイル毎)で変数名を変えていますので注意してください.
url = "http://www.hit-u.ac.jp/guide/information/data/pdf/06_kakenhi_2015.pdf"#PDFファイルからテキストを読み込む
res <- pdf_text(url)
#テキストを置き換えCSV形式に変換する
res<-gsub(",","",res[1])
res<-gsub(" +",",",res[1])
#ファイルに書き出す
write(res,"kaken15.txt")
#CSVファイルからデータを読み込む
df15<-read.csv("kaken15.txt",skip = 5,header = FALSE,stringsAsFactors = FALSE)
#不要な行を削除する
df15<-df15[-(12:nrow(df15)),]
#値を数値として処理する
df15$V2<-as.numeric(df15$V2)
df15$V3<-as.numeric(df15$V3)
df15$V4<-as.numeric(df15$V4)
#欠損値を0にする
df15$V2[is.na(df15$V2)]<-0
df15$V3[is.na(df15$V3)]<-0
df15$V4[is.na(df15$V4)]<-0
#列名を設定する
colnames(df15)<-c("type","count","direct","indirect")
#交付件数を描画する
g1<-ggplot(df15,aes(x=type,y=count))+geom_bar(stat="identity")+xlab("研究種目")+ylab("交付件数")+ggtitle("2015年 科学研究費補助金")+theme_gray(base_family ="yugo")+theme(axis.text.x = element_text(angle = 90, hjust = 1))
g1#交付額を描画する
g2<-ggplot(df15,aes(x=type,y=(direct+indirect)/1000,group=1))+geom_bar(stat="identity")+xlab("研究種目")+ylab("交付額(千円)")+ggtitle("2015年 科学研究費補助金")+theme_gray(base_family ="yugo")+theme(axis.text.x = element_text(angle = 90, hjust = 1))
g2url = "http://www.hit-u.ac.jp/guide/information/data/pdf/06_kakenhi_2014.pdf"res <- pdf_text(url)
#res<-iconv(res[1],to="UTF-8")
res<-gsub(",","",res[1])
res<-gsub(" +",",",res[1])
write(res,"kaken14.txt")
#df14<-read.csv(text=res[1],skip = 5,header = FALSE,stringsAsFactors = FALSE)
df14<-read.csv(file="kaken14.txt",skip = 5,header = FALSE,stringsAsFactors = FALSE)
df14<-df14[-(13:nrow(df14)),]
df14$V2<-as.numeric(df14$V2)
df14$V3<-as.numeric(df14$V3)
df14$V4<-as.numeric(df14$V4)
df14$V2[is.na(df14$V2)]<-0
df14$V3[is.na(df14$V3)]<-0
df14$V4[is.na(df14$V4)]<-0
colnames(df14)<-c("type","count","direct","indirect")
g1<-ggplot(df14,aes(x=type,y=count))+geom_bar(stat="identity")+xlab("研究種目")+ylab("交付件数")+ggtitle("2014年 科学研究費補助金")+theme_gray(base_family ="yugo")+theme(axis.text.x = element_text(angle = 90, hjust = 1))
g1g2<-ggplot(df14,aes(x=type,y=(direct+indirect)/1000,group=1))+geom_bar(stat="identity")+xlab("研究種目")+ylab("交付額(千円)")+ggtitle("2014年 科学研究費補助金")+theme_gray(base_family ="yugo")+theme(axis.text.x = element_text(angle = 90, hjust = 1))
g2url = "http://www.hit-u.ac.jp/guide/information/data/pdf/06_kakenhi_2013.pdf"res <- pdf_text(url)
res<-gsub(",","",res[1])
res<-gsub(" +",",",res[1])
write(res,"kaken13.txt")
#df13<-read.csv(text=res[1],skip = 5,header = FALSE,stringsAsFactors = FALSE)
df13<-read.csv(file = "kaken13.txt",skip = 5,header = FALSE,stringsAsFactors = FALSE)
df13<-df13[-(13:nrow(df13)),]
df13$V2<-as.numeric(df13$V2)
df13$V3<-as.numeric(df13$V3)
df13$V4<-as.numeric(df13$V4)
df13$V2[is.na(df13$V2)]<-0
df13$V3[is.na(df13$V3)]<-0
df13$V4[is.na(df13$V4)]<-0
colnames(df13)<-c("type","count","direct","indirect")
g1<-ggplot(df13,aes(x=type,y=count))+geom_bar(stat="identity")+xlab("研究種目")+ylab("交付件数")+ggtitle("2013年 科学研究費補助金")+theme_gray(base_family ="yugo")+theme(axis.text.x = element_text(angle = 90, hjust = 1))
g1g2<-ggplot(df13,aes(x=type,y=(direct+indirect)/1000,group=1))+geom_bar(stat="identity")+xlab("研究種目")+ylab("交付額(千円)")+ggtitle("2013年 科学研究費補助金")+theme_gray(base_family ="yugo")+theme(axis.text.x = element_text(angle = 90, hjust = 1))
g2url = "http://www.hit-u.ac.jp/guide/information/data/pdf/06_kakenhi_2012.pdf"res <- pdf_text(url)
res<-gsub(",","",res[1])
res<-gsub(" +",",",res[1])
write(res,"kaken12.txt")
df12<-read.csv(file="kaken12.txt",skip = 5,header = FALSE,stringsAsFactors = FALSE)
#df12<-read.csv(text=res[1],skip = 5,header = FALSE,stringsAsFactors = FALSE)
df12<-df12[-(13:nrow(df12)),]
df12$V2<-as.numeric(df12$V2)
df12$V3<-as.numeric(df12$V3)
df12$V4<-as.numeric(df12$V4)
df12$V2[is.na(df12$V2)]<-0
df12$V3[is.na(df12$V3)]<-0
df12$V4[is.na(df12$V4)]<-0
colnames(df12)<-c("type","count","direct","indirect")
g1<-ggplot(df12,aes(x=type,y=count))+geom_bar(stat="identity")+xlab("研究種目")+ylab("交付件数")+ggtitle("2012年 科学研究費補助金")+theme_gray(base_family ="yugo")+theme(axis.text.x = element_text(angle = 90, hjust = 1))
g1g2<-ggplot(df12,aes(x=type,y=(direct+indirect)/1000,group=1))+geom_bar(stat="identity")+xlab("研究種目")+ylab("交付額(千円)")+ggtitle("2012年 科学研究費補助金")+theme_gray(base_family ="yugo")+theme(axis.text.x = element_text(angle = 90, hjust = 1))
g2url = "http://www.hit-u.ac.jp/guide/information/data/pdf/06_kakenhi_2011.pdf"res <- pdf_text(url)
#res<-iconv(res[1],to="UTF-8")
res<-gsub(",","",res[1])
res<-gsub(" +",",",res[1])
write(res,"kaken11.txt")
#df11<-read.csv(text=res[1],skip = 5,header = FALSE,stringsAsFactors = FALSE)
df11<-read.csv(file="kaken11.txt",skip = 5,header = FALSE,stringsAsFactors = FALSE)
df11<-df11[-(15:nrow(df11)),]
df11$V2<-as.numeric(df11$V2)
df11$V3<-as.numeric(df11$V3)
df11$V4<-as.numeric(df11$V4)
df11$V2[is.na(df11$V2)]<-0
df11$V3[is.na(df11$V3)]<-0
df11$V4[is.na(df11$V4)]<-0
colnames(df11)<-c("type","count","direct","indirect")
g1<-ggplot(df11,aes(x=type,y=count))+geom_bar(stat="identity")+xlab("研究種目")+ylab("交付件数")+ggtitle("2011年 科学研究費補助金")+theme_gray(base_family ="yugo")+theme(axis.text.x = element_text(angle = 90, hjust = 1))
g1g2<-ggplot(df11,aes(x=type,y=(direct+indirect)/1000,group=1))+geom_bar(stat="identity")+xlab("研究種目")+ylab("交付額(千円)")+ggtitle("2011年 科学研究費補助金")+theme_gray(base_family ="yugo")+theme(axis.text.x = element_text(angle = 90, hjust = 1))
g2url = "http://www.hit-u.ac.jp/guide/information/data/pdf/06_kakenhi_2010.pdf"res <- pdf_text(url)
res<-gsub(",","",res[1])
res<-gsub(" +",",",res[1])
write(res,"kaken10.txt")
#df10<-read.csv(text=res[1],skip = 5,header = FALSE,stringsAsFactors = FALSE)
df10<-read.csv(file = "kaken10.txt",skip = 5,header = FALSE,stringsAsFactors = FALSE)
df10<-df10[-(15:nrow(df10)),]
df10$V2<-as.numeric(df10$V2)
df10$V3<-as.numeric(df10$V3)
df10$V4<-as.numeric(df10$V4)
df10$V2[is.na(df10$V2)]<-0
df10$V3[is.na(df10$V3)]<-0
df10$V4[is.na(df10$V4)]<-0
colnames(df10)<-c("type","count","direct","indirect")
g1<-ggplot(df10,aes(x=type,y=count))+geom_bar(stat="identity")+xlab("研究種目")+ylab("交付件数")+ggtitle("2010年 科学研究費補助金")+theme_gray(base_family ="yugo")+theme(axis.text.x = element_text(angle = 90, hjust = 1))
g1g2<-ggplot(df10,aes(x=type,y=(direct+indirect)/1000,group=1))+geom_bar(stat="identity")+xlab("研究種目")+ylab("交付額(千円)")+ggtitle("2010年 科学研究費補助金")+theme_gray(base_family ="yugo")+theme(axis.text.x = element_text(angle = 90, hjust = 1))
g2以上で年別の可視化は終わりです. ここまでの作業環境を保存しておきましょう.
save(list = ls(all.names = TRUE), file = "day03.RData")つぎは年別のデータを統合し,年ごとの変化をみていきます.
これまでは年ごとに科研費の交付額・件数を可視化してきましたが,今度は年ごとの交付額・件数の変化をみてみたいと思います.
まず,年ごとのデータフレームを一つのデータフレームにまとめます. どの年のデータかわかるように西暦列を追加します.
#データフレームに列yearを追加し,値を2010に設定する
df10$year=2010
df10## type count direct indirect year
## 1 特別推進研究 1 78000000 23400000 2010
## 2 新学術領域研究 1 2100000 630000 2010
## 3 基盤研究(S) 3 67200000 20160000 2010
## 4 基盤研究(A) 9 72500000 21750000 2010
## 5 基盤研究(B) 29 94500000 28350000 2010
## 6 基盤研究(C) 44 45500000 13650000 2010
## 7 挑戦的萌芽研究 4 4000000 0 2010
## 8 若手研究(S) 1 14800000 4440000 2010
## 9 若手研究(A) 3 8500000 2550000 2010
## 10 若手研究(B) 22 23000000 6900000 2010
## 11 若手研究(スタートアップ) 7 6690000 2007000 2010
## 12 研究成果公開促進費 4 10400000 0 2010
## 13 特別研究員奨励費 36 21300000 0 2010
## 14 学術創成研究費 1 62400000 18720000 2010
他の年のデータフレームにも西暦列を追加します.
df11$year=2011
df12$year=2012
df13$year=2013
df14$year=2014
df15$year=2015
df16$year=2016つぎにこれらのデータフレームを一つにまとめます. ここでは各データフレームを縦列に結合します.
kaken<-rbind(df10,df11,df12,df13,df14,df15,df16)rbind 関数は縦列にデータフレームを結合する関数です. 類似関数に 横列にデータフレームを結合する cbind 関数があります.
結合結果を見てみましょう.
kaken## type count direct indirect year
## 1 特別推進研究 1 78000000 23400000 2010
## 2 新学術領域研究 1 2100000 630000 2010
## 3 基盤研究(S) 3 67200000 20160000 2010
## 4 基盤研究(A) 9 72500000 21750000 2010
## 5 基盤研究(B) 29 94500000 28350000 2010
## 6 基盤研究(C) 44 45500000 13650000 2010
## 7 挑戦的萌芽研究 4 4000000 0 2010
## 8 若手研究(S) 1 14800000 4440000 2010
## 9 若手研究(A) 3 8500000 2550000 2010
## 10 若手研究(B) 22 23000000 6900000 2010
## 11 若手研究(スタートアップ) 7 6690000 2007000 2010
## 12 研究成果公開促進費 4 10400000 0 2010
## 13 特別研究員奨励費 36 21300000 0 2010
## 14 学術創成研究費 1 62400000 18720000 2010
## 15 特別推進研究 1 107900000 32370000 2011
## 16 新学術領域研究 2 5100000 1530000 2011
## 17 基盤研究(S) 4 94500000 28350000 2011
## 18 基盤研究(A) 13 126700000 38010000 2011
## 19 基盤研究(B) 27 85900000 25770000 2011
## 20 基盤研究(C) 59 54800000 16440000 2011
## 21 挑戦的萌芽研究 5 5600000 0 2011
## 22 若手研究(S) 1 12400000 3720000 2011
## 23 若手研究(A) 3 7200000 2160000 2011
## 24 若手研究(B) 31 27191395 8157419 2011
## 25 研究活動スタート支援 10 8490000 2547000 2011
## 26 研究成果公開促進費 6 21200000 0 2011
## 27 特別研究員奨励費 52 33900000 0 2011
## 28 学術創成研究費 1 60800000 18240000 2011
## 29 新学術領域研究 1 1900000 570000 2012
## 30 基盤研究(S) 3 74700000 22410000 2012
## 31 基盤研究(A) 19 148100000 44430000 2012
## 32 基盤研究(B) 32 117300000 35190000 2012
## 33 基盤研究(C) 57 56220000 16866000 2012
## 34 挑戦的萌芽研究 4 3800000 1140000 2012
## 35 若手研究(S) 1 14300000 4290000 2012
## 36 若手研究(A) 2 2600000 780000 2012
## 37 若手研究(B) 41 37190000 11157000 2012
## 38 研究活動スタート支援 9 7990000 2397000 2012
## 39 研究成果公開促進費 3 6400000 0 2012
## 40 特別研究員奨励費 54 34858328 0 2012
## 41 新学術領域研究 1 1900000 570000 2013
## 42 基盤研究(S) 3 67800000 20340000 2013
## 43 基盤研究(A) 20 168500000 50550000 2013
## 44 基盤研究(B) 39 135458000 41730000 2013
## 45 基盤研究(C) 62 61500000 18450000 2013
## 46 挑戦的萌芽研究 6 5000000 1500000 2013
## 47 若手研究(S) 1 12700000 3810000 2013
## 48 若手研究(A) 1 1400000 420000 2013
## 49 若手研究(B) 38 32728000 10230000 2013
## 50 研究活動スタート支援 12 10000000 3000000 2013
## 51 研究成果公開促進費 2 2300000 0 2013
## 52 特別研究員奨励費 50 34200000 0 2013
## 53 新学術領域研究 1 1900000 570000 2014
## 54 基盤研究(S) 2 55100000 18540000 2014
## 55 基盤研究(A) 24 185233000 56580000 2014
## 56 基盤研究(B) 41 142200000 42660000 2014
## 57 基盤研究(C) 70 70286000 21447000 2014
## 58 挑戦的萌芽研究 4 3300000 990000 2014
## 59 若手研究(S) 1 15800000 4740000 2014
## 60 若手研究(A) 0 0 0 2014
## 61 若手研究(B) 35 30364000 9536000 2014
## 62 研究活動スタート支援 15 12100000 3630000 2014
## 63 研究成果公開促進費 1 2100000 0 2014
## 64 特別研究員奨励費 50 38300000 0 2014
## 65 新学術領域研究 0 0 0 2015
## 66 基盤研究(S) 4 118200000 35460000 2015
## 67 基盤研究(A) 24 160300000 48090000 2015
## 68 基盤研究(B) 42 145500000 43650000 2015
## 69 基盤研究(C) 74 75800000 22740000 2015
## 70 挑戦的萌芽研究 6 4000000 1200000 2015
## 71 若手研究(A) 0 0 0 2015
## 72 若手研究(B) 24 21124230 6090000 2015
## 73 研究活動スタート支援 11 8600000 2580000 2015
## 74 研究成果公開促進費 3 4998944 0 2015
## 75 特別研究員奨励費 57 47674815 3690000 2015
## 76 新学術領域研究 0 0 0 2016
## 77 基盤研究(S) 3 98100000 29430000 2016
## 78 基盤研究(A) 22 145000000 43500000 2016
## 79 基盤研究(B) 38 133400000 40020000 2016
## 80 基盤研究(C) 97 101371167 30303357 2016
## 81 挑戦的萌芽研究 5 4100000 1230000 2016
## 82 若手研究(A) 2 7700000 2310000 2016
## 83 若手研究(B) 23 23798457 7139538 2016
## 84 研究活動スタート支援 7 7300000 2190000 2016
## 85 研究成果公開促進費 1 1099872 0 2016
## 86 特別研究員奨励費 67 53600000 3480000 2016
## 87 国際共同研究強化 4 34300000 10290000 2016
ひとつのデータフレームに統合されているのがわかります.
どうやら研究種目(type列)の中に全角の括弧記号が混じっているので直しておきましょう.
#全角文字を半角文字に置換する
kaken$type<-gsub("(","(",kaken$type)
kaken$type<-gsub(")",")",kaken$type)これで年ごとのデータフレームをまとめることができました. あとは可視化するだけです.
とりあえず一つにまとめたデータフレームを可視化してみましょう. 塗り色(fill)に type を指定することで,種目別に色分けをします.
ggplot(kaken,aes(x=year,y=count,fill=type))+geom_bar(stat="identity")+ggtitle("科研費:交付件数の推移")+theme_bw(base_family ="yugo")ggplot(kaken,aes(x=year,y=(direct+indirect)/1000000,fill=type))+geom_bar(stat="identity")+ylab("経費(百万円)")+ggtitle("科研費:交付経費の推移")+theme_bw(base_family ="yugo")交付額の増減が見られますが,交付件数が毎年伸びています.さすが11年連続新規採択率全国1位です.
http://www.hit-u.ac.jp/function/outside/news/2015/0917_2.html
https://www.jsps.go.jp/j-grantsinaid/27_kdata/
それでは科研費の基盤研究の推移を中心にもう少し詳しくみてみましょう.
まず,基盤研究(C)だけをピックアップしてみます. subset 関数を使ってデータフレームのサブセットを作ります.
#データフレームのサブセット作る
kiban_c<-subset(kaken,type=="基盤研究(C)")基盤研究(C)の交付件数および交付額の年次推移をみてみましょう.
g1<-ggplot(kiban_c,aes(x=year,y=count))+geom_bar(stat="identity")+xlab("年")+ylab("件数")+ggtitle("基盤研究(C):交付件数の推移")
g1+theme_gray(base_family ="yugo")#グレースケールが気に入らない場合は白黒とすることも可能
g1+theme_bw(base_family = "yugo")g2<-ggplot(kiban_c,aes(x=year,y=(direct+indirect)/1000))+geom_line(stat="identity")+ylab("経費(千円)")+theme_gray(base_family ="yugo")+ggtitle("基盤研究(C):交付経費の推移")
g2なお,グラフのグリッドは以下で消すことができます.
#主目盛り線を非表示とする
g2+theme(panel.grid.major = element_blank())#主目盛り線に加え,補助目盛り線を非表示とする
g2+theme(panel.grid.major = element_blank(),panel.grid.minor = element_blank())#上記に加え,背景を非表示とする
g2+theme(panel.grid.major = element_blank(),panel.grid.minor = element_blank(),panel.background = element_blank())基盤研究(C)の交付件数および交付額が伸び続けています.毎年,基盤研究(C)が採択されているということです.新規採択率上位1位の推進力はここにあるのでしょうか...
おつぎは基盤研究(B).
kiban_b<-subset(kaken,type=="基盤研究(B)")
g1<-ggplot(kiban_b,aes(x=year,y=count))+geom_bar(stat="identity")+xlab("年")+ylab("件数")+ggtitle("基盤研究(B):交付件数の推移")+theme_gray(base_family ="yugo")
g1g2<-ggplot(kiban_b,aes(x=year,y=(direct+indirect)/1000))+geom_line(stat="identity")+ylab("経費(千円)")+theme_gray(base_family ="yugo")+ggtitle("基盤研究(B):交付経費の推移")
g2基盤研究(B)には増減があります.2016年で減少に転じています.
つぎは基盤研究(A)
kiban_a<-subset(kaken,type=="基盤研究(A)")
g1<-ggplot(kiban_a,aes(x=year,y=count))+geom_bar(stat="identity")+xlab("年")+ylab("件数")+ggtitle("基盤研究(A):交付件数の推移")+theme_gray(base_family ="yugo")
g1g2<-ggplot(kiban_a,aes(x=year,y=(direct+indirect)/1000))+geom_line(stat="identity")+ylab("経費(千円)")+theme_gray(base_family ="yugo")+ggtitle("基盤研究(A):交付経費の推移")
g2基盤研究(A)にも増減があります.2016年で減少に転じています..
最後は基盤研究(S)
kiban_s<-subset(kaken,type=="基盤研究(S)")
g1<-ggplot(kiban_s,aes(x=year,y=count))+geom_bar(stat="identity")+xlab("年")+ylab("件数")+ggtitle("基盤研究(S):交付件数の推移")+theme_gray(base_family ="yugo")
g1g2<-ggplot(kiban_s,aes(x=year,y=(direct+indirect)/1000))+geom_line(stat="identity")+ylab("経費(千円)")+theme_gray(base_family ="yugo")+ggtitle("基盤研究(S):交付経費の推移")
g2さすがに基盤研究(S)となると毎年とはいかないようですが, コンスタントに獲得しているのがすごいです.
最後に基盤研究をまとめてみてみましょう.データフレームの統合には rbind 関数を使います.
kiban<-rbind(kiban_c,kiban_b,kiban_a,kiban_s)
g1<-ggplot(kiban,aes(x=year,y=count,fill=type))+geom_bar(stat="identity")+ggtitle("科研費基盤研究:交付件数の推移")+theme_bw(base_family ="yugo")
g1g2<-ggplot(kiban,aes(x=year,y=(direct+indirect)/1000,fill=type))+geom_bar(stat="identity")+ylab("経費(千円)")+ggtitle("科研費基盤研究:交付経費の推移")+theme_bw(base_family ="yugo")
g2経費の総額が大きくなりすぎており,経費のラベルが指数表示になっています. 指数表示となる基準値を変更します.
#指数表現とする基準値を変更する
options(scipen=100)この状態で描画してみましょう.
g2<-ggplot(kiban,aes(x=year,y=(direct+indirect)/1000,fill=type))+geom_bar(stat="identity")+ylab("経費(円)")+ggtitle("科研費基盤研究:交付経費の推移")+theme_bw(base_family ="yugo")
g2指数表現でなくなっていることがわかります.
指数表現とする基準値をデフォルト値に戻す場合は0を指定します.
#指数表現とする基準値をデフォルトに戻す
options(scipen = 0)指定した色でグラフを塗り分けしたいときは scale_fill_manual 関数を用います.scale_fill_manual 関数の引数には色リストを指定します.
#色の指定には文字列や
g1+scale_fill_manual(values = c("red","blue","yellow","green"))#16進数
g1+scale_fill_manual(values = c("#FF2800","#FAF500","#35A16B","#0041FF"))#rgb関数を使うことができます
g1+scale_fill_manual(values = c(rgb(255/255,40/255,0/255),rgb(250/255,245/255,0/255),rgb(53/255,161/255,107/255),rgb(0/255,65/255,255/255)))g2+scale_fill_manual(values = c(rgb(255/255,40/255,0/255),rgb(250/255,245/255,0/255),rgb(53/255,161/255,107/255),rgb(0/255,65/255,255/255)))配色に拘る人はカラーユニバーサルデザイン推奨配色セット等を参考にするとよいかもしれません.
科研費PDFファイルから読み込んだデータを可視化し,画像ファイルとして提出してください. 提出ファイルはZIP形式でひとつにまとめてください.
2016-2010年の科研費データの可視化と同じように2009年のデータを可視化してください.
2009年はその他のデータと微妙に形式が異なるので注意が必要です.
ヒント: CSVファイル読み込み時のスキップ数に注意
url = "http://www.hit-u.ac.jp/guide/information/data/pdf/06_kakenhi_2009.pdf"提出画像のイメージ:
上記課題でグラフ化した2009年のデータを 科研費基盤研究の交付件数,交付経費の推移のグラフを作成してください.
ヒント:2009年のデータに含まれる全角文字を半角文字に置換する必要があります.括弧記号だけではありません.
提出画像のイメージ
科研費PDFファイル以外のPDFファイルでも表形式のデータが含まれる場合は上記の手法でデータ処理できる可能性があります.
※PDFファイルにセキュリティオプションが設定されている,PDFファイルにテキストデータが含まれていない(画像のみ)場合は本手法でのデータ処理は不可です.
url = "http://www.hit-u.ac.jp/guide/information/data/pdf/04-1_library_holdings.pdf"res<-pdf_text(url)
res<-gsub(",","",res[1])
res<-gsub(" +",",",res[1])
tbl<-read.csv(text=res[1],header = FALSE,stringsAsFactors = FALSE)
tbl## V1 V2 V3
## 1 附属図書館
## 2 蔵書数
## 3 2016年3月31日現在 2015年3月31日現在
## 4 区分 冊数
## 5 和書 1068036
## 6 図書冊数 洋書
## 7 791913
## 8 計 1992168
## 9 区分 種類数
## 10 和雑誌 6879
## 11 雑誌種類数 洋雑誌
## 12 8726
## 13 計 16920
## 14 種類数 種類数
## 15 購読電子ジャーナル数 購読電子ジャーナル 12461
## 16 種類数 種類数
## 17 電子ブック数 電子ブック
## 18 区分 種類数
## 19 マイクロフィルム 773
## 20 視聴覚資料種類数 マイクロフィッシュ
## 21 計 904
## 22 区分 種類数
## 23 和書 136
## 24 視聴覚資料
## 25 (マイクロフィルム) 洋書 606
## 26 種類数
## 27 計 742
## V4 V5 V6 V7
## 1
## 2
## 3 2014年3月31日現在 2013年3月31日現在 2012年3月31日現在 2011年3月31日現在
## 4 冊数 冊数 冊数 冊数
## 5 1056945 1046236 1041719 983386
## 6 924132 915129 907193 898951
## 7
## 8 1972074 1953429 1940670 1861338
## 9 種類数 種類数 種類数 種類数
## 10 6861 6850 6792 6790
## 11 10041 9993 9980 9964
## 12
## 13 16854 16830 16756 16657
## 14 種類数 種類数 種類数 種類数
## 15 18371 18371 16210 14082
## 16 種類数 種類数 種類数 種類数
## 17 7449
## 18 種類数 種類数
## 19 759 752
## 20 131 131 130
## 21 890 882
## 22 種類数 種類数
## 23 107 103
## 24
## 25 603 602
## 26
## 27 710 705
## V8 V9 V10 V11
## 1
## 2
## 3 2010年3月31日現在 2009年3月31日現在 2008年3月31日現在 2007年3月31日現在
## 4 冊数 冊数 冊数 冊数
## 5 971202 957713 944857 927939
## 6 877952 867719 858080 849020
## 7
## 8 1838921 1815793 1793877 1768253
## 9 種類数 種類数 種類数 種類数
## 10 6714 6526 6506 6571
## 11 9867 9794 9699 9643
## 12
## 13 16508 16225 16149 16378
## 14 種類数 種類数
## 15 11504 5376 3893
## 16 種類数 種類数
## 17
## 18
## 19
## 20
## 21
## 22
## 23
## 24
## 25
## 26
## 27
## V12 V13 V14 V15
## 1
## 2
## 3 2006年3月31日現在 2005年3月31日現在 2004年3月31日現在 2003年3月31日現在
## 4 冊数 冊数 冊数 冊数
## 5 914537 902680 894064 881378
## 6 840314 833638 825044 812968
## 7
## 8 1748175 1727724 1707032 1682945
## 9 種類数 種類数 種類数 種類数
## 10 6569 6566 6478 6228
## 11 9807 9792 9786 9238
## 12
## 13 16361 16352 15716 15469
## 14
## 15
## 16
## 17
## 18
## 19
## 20
## 21
## 22
## 23
## 24
## 25
## 26
## 27
## V16
## 1
## 2
## 3
## 4 冊数
## 5 864796
## 6 801567
## 7
## 8 1656709
## 9 種類数
## 10 6224
## 11 9241
## 12
## 13 14950
## 14
## 15
## 16
## 17
## 18
## 19
## 20
## 21
## 22
## 23
## 24
## 25
## 26
## 27
#目的のデータを取り出す
tbl[3,3:10]## V3 V4 V5 V6
## 3 2015年3月31日現在 2014年3月31日現在 2013年3月31日現在 2012年3月31日現在
## V7 V8 V9 V10
## 3 2011年3月31日現在 2010年3月31日現在 2009年3月31日現在 2008年3月31日現在
tbl[15,3:10]## V3 V4 V5 V6 V7 V8 V9 V10
## 15 12461 18371 18371 16210 14082 11504 5376 3893
#行と列を転置する
t(tbl[3,3:10])## 3
## V3 "2015年3月31日現在"
## V4 "2014年3月31日現在"
## V5 "2013年3月31日現在"
## V6 "2012年3月31日現在"
## V7 "2011年3月31日現在"
## V8 "2010年3月31日現在"
## V9 "2009年3月31日現在"
## V10 "2008年3月31日現在"
t(tbl[15,3:10])## 15
## V3 "12461"
## V4 "18371"
## V5 "18371"
## V6 "16210"
## V7 "14082"
## V8 "11504"
## V9 "5376"
## V10 "3893"
#転置後のデータでデータフレームを作成する
df<-data.frame(t(tbl[3,3:10]),t(tbl[15,3:10]))
colnames(df)<-c("date","oj")
df## date oj
## V3 2015年3月31日現在 12461
## V4 2014年3月31日現在 18371
## V5 2013年3月31日現在 18371
## V6 2012年3月31日現在 16210
## V7 2011年3月31日現在 14082
## V8 2010年3月31日現在 11504
## V9 2009年3月31日現在 5376
## V10 2008年3月31日現在 3893
df$oj<-as.numeric(as.character(df$oj))
df## date oj
## V3 2015年3月31日現在 12461
## V4 2014年3月31日現在 18371
## V5 2013年3月31日現在 18371
## V6 2012年3月31日現在 16210
## V7 2011年3月31日現在 14082
## V8 2010年3月31日現在 11504
## V9 2009年3月31日現在 5376
## V10 2008年3月31日現在 3893
df$year<-c(2015,2014,2013,2012,2011,2010,2009,2008)
df## date oj year
## V3 2015年3月31日現在 12461 2015
## V4 2014年3月31日現在 18371 2014
## V5 2013年3月31日現在 18371 2013
## V6 2012年3月31日現在 16210 2012
## V7 2011年3月31日現在 14082 2011
## V8 2010年3月31日現在 11504 2010
## V9 2009年3月31日現在 5376 2009
## V10 2008年3月31日現在 3893 2008
ggplot(df,aes(x=year,y=oj))+geom_bar(stat="identity")+ylab("件数")+ggtitle("購読電子ジャーナル数の推移")+theme_gray(base_family ="yugo")電子ジャーナルの購読数が2015年で減少しています.契約変更とかがあったのでしょうか...